class Solution
{
public:
    int minSizeSubarray(vector<int> &nums, int target)
    {
        long long sum = 0;
        for (int num : nums)
        {
            sum += num;
        }
        int n = nums.size();
        int result = (target / sum) * n;
        target %= sum;
        if (target == 0)
        {
            return result;
        }

        for (int i = 0; i < n; i++)
        {
            nums.push_back(nums[i]);
        }

        int subArrayLen = INT_MAX;
        unordered_map<long long, int> prefixSum;
        prefixSum[0] = -1;
        long long curSum = 0;
        for (int i = 0; i < nums.size(); i++)
        {
            curSum += nums[i];
            if (prefixSum.count(curSum - target))
            {
                subArrayLen = min(subArrayLen, i - prefixSum[curSum - target]);
            }
            prefixSum[curSum] = i;
        }
        if (subArrayLen == INT_MAX)
        {
            return -1;
        }
        return result + subArrayLen;
    }
};